<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="lwyas" id="lwyas"><span data-lake-id="u231fbfea" id="u231fbfea">典型回答</span></h1>
  <p data-lake-id="u7ee49107" id="u7ee49107"><br></p>
  <p data-lake-id="u4f67ad14" id="u4f67ad14"><span data-lake-id="u5a08490d" id="u5a08490d">Java 8 和 Java 11都是LTS版本的JDK，所以会有人经常问他们之间的区别。特别是在GC上面的差别。</span></p>
  <p data-lake-id="u29fbfeb4" id="u29fbfeb4"><span data-lake-id="ub2de874b" id="ub2de874b">​</span><br></p>
  <p data-lake-id="u99146d25" id="u99146d25"><span data-lake-id="u9478e550" id="u9478e550">首先，在垃圾收集器上面，</span><strong><span data-lake-id="uc1202f93" id="uc1202f93">Java 8 中默认的Parallel Scavenge GC+Parallel Old GC的</span></strong><span data-lake-id="u13373567" id="u13373567">，分别用来做新生代和老年代的垃圾回收。而在</span><strong><span data-lake-id="u4ffeff8e" id="u4ffeff8e">Java 11中默认采用的是G1进行整堆回收的</span></strong><span data-lake-id="uceeacee9" id="uceeacee9">（Java 9中就是默认的了）。</span></p>
  <p data-lake-id="u4f698282" id="u4f698282"><span data-lake-id="u6052232d" id="u6052232d">​</span><br></p>
  <p data-lake-id="ue69d32da" id="ue69d32da"><span data-lake-id="ue7a27898" id="ue7a27898">另外，</span><strong><span data-lake-id="u7082daf7" id="u7082daf7">Java 11中还新增了一种垃圾收集器，那就是ZGC</span></strong><span data-lake-id="u94baf434" id="u94baf434">，他可以在保证高吞吐量的同时保证最短的暂停时间。</span></p>
  <p data-lake-id="ud7e3cfb1" id="ud7e3cfb1"><span data-lake-id="u1cd98c25" id="u1cd98c25">​</span><br></p>
  <p data-lake-id="u6948a98f" id="u6948a98f"><span data-lake-id="ucefa74f6" id="ucefa74f6">​</span><br></p>
  <p data-lake-id="u272d2a4c" id="u272d2a4c"><span data-lake-id="u30a8f7f9" id="u30a8f7f9">在知道了垃圾收集器上面的区别之后，就可以基于Parallel Scavenge GC+Parallel Old GC 和 G1的区别进一步说一下GC上面的区别了。</span></p>
  <p data-lake-id="u4ce6e3fb" id="u4ce6e3fb"><span data-lake-id="u11c3d0e5" id="u11c3d0e5">​</span><br></p>
  <p data-lake-id="u0d0cb5de" id="u0d0cb5de"><span data-lake-id="uc47a2ed7" id="uc47a2ed7">在垃圾识别及回收上面，</span><strong><span data-lake-id="u81640480" id="u81640480">Java 8基于的是单纯地可达性分析，而Java 11中的G1采用的是三色标记法，可以大大降低STW的时长。</span></strong></p>
  <p data-lake-id="ue562856d" id="ue562856d"><span data-lake-id="u79108e5c" id="u79108e5c">​</span><br></p>
  <p data-lake-id="u9943d9f9" id="u9943d9f9"><span data-lake-id="u90650902" id="u90650902">​</span><br></p>
  <p data-lake-id="u8690a495" id="u8690a495"><span data-lake-id="u0f197c3e" id="u0f197c3e">​</span><br></p>
  <p data-lake-id="ude22107c" id="ude22107c"><span data-lake-id="u12eec657" id="u12eec657">另外，</span><strong><span data-lake-id="ub3a7b3b5" id="ub3a7b3b5">G1的内存划分是自适应的，它会根据堆的大小和使用情况来动态调整各个区域的大小和比例。而Parallel Scavenge GC+Parallel Old GC都是固定分配的策略。</span></strong></p>
  <p data-lake-id="ud2bf478e" id="ud2bf478e"><strong><span data-lake-id="u6d28cd18" id="u6d28cd18">​</span></strong><br></p>
  <p data-lake-id="u764fe623" id="u764fe623"><strong><span data-lake-id="u0a17d7bf" id="u0a17d7bf">​</span></strong><br></p>
 </body>
</html>